iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
自我挑戰組

IOS app開發介紹系列 第 9

IOS app開發介紹 - IOS一些重要的概念與機制(5. 背景執行)

  • 分享至 

  • xImage
  •  

IOS背景執行程式是一項讓開發者頭痛的問題,以下簡單介紹幾種情境與方式,幫助開發者盡量滿足app開發需求

背景執行情境:

  1. 定期從server更新資料
    2: app退入背景,需要執行long time task
  2. 背景接收通知(p.s app is not killed)
  3. 背景收到VOIP通話(p.s app is killed)

以下介紹當遇到上述情境時,我們該如何達成我們的目標

1. 定期從server更新資料

你可以透過允許background mode滿足定時從server抓取資料
https://ithelp.ithome.com.tw/upload/images/20181024/20111592EYHRF8Bxuh.png

我們可以設定獲取資料的間隔(setMinimumBackgroundFetchInterval()),但是還是要由ios系統來決定什麼時候要讓你更新資料~ 如果希望間隔越小越好,可以直接設定成UIApplicationBackgroundFetchIntervalMinimum


2. app退入背景,需要執行long time task

如果我們的app退入背景,需要花一些時間上傳資料到server上,我們可以透過beginBackgroundTaskendBackgroundTask來執行long time task.
範例如下:

self.backgroundTaskID = UIApplication.shared.
           beginBackgroundTask (withName: "Finish Network Tasks") {
   // Your long time task .............
   UIApplication.shared.endBackgroundTask(self.backgroundTaskID!) //call endBackgroundTask when your task is complete
   self.backgroundTaskID = UIBackgroundTaskInvalid
}
//ref: https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle/preparing_your_app_to_run_in_the_background/extending_your_app_s_background_execution_time?fbclid=IwAR360sEZVY-CTsJHNyks6Mvx9Im-osgQ5LfNuuhwotASphWP4TJUbWoERFI

3. 背景接收通知

想要在app在背景時接收通知,我們一樣可以在Capabilties中去設定(p.s app不是關閉狀態),如下圖所示。
這樣當app在背景時,我們可以接收通知,進而做一些我們想要做的事(ex: 跳出系統橫幅通知或是更新資料或更新UI)
注意server需要有APNS的憑證,這樣才能收到通知

ref: https://www.kancloud.cn/digest/ios-push-hherima/125549

詳細教學請參考:
https://www.appcoda.com.tw/push-notification-ios/


4. 背景收到VOIP通話

想要在app在背景或關閉時接收VOIP通話,我們一樣可以在Capabilties中去設定,如下圖所示。
注意需要搭配Pushkitserver需要有VOIP的憑證,這樣才能通知我們的app有VOIP通話。收到VOIP通話後,需要使用Callkit來讓iphone在鎖定螢幕的時候,可以跳出來電UI。如果不串Callkit,那我們只能用系統橫幅通知來提示使用者有來電。

ref: https://www.jianshu.com/p/f9bef7e7a4ab


上一篇
IOS app開發介紹 - IOS一些重要的概念與機制(4. Multi-threads)
下一篇
IOS app開發介紹 - IOS一些重要的概念與機制(6. structures and classes)
系列文
IOS app開發介紹22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言